package com.spsy.pay.contorller;

import com.alibaba.fastjson2.JSON;
import com.spsy.common.core.domain.R;
import com.spsy.pay.canstand.RabbitMqCanstand;
import com.spsy.pay.domain.PaymentOrder;
import com.spsy.pay.order.WeiXinUtil;
import com.spsy.pay.service.IPaymentOrderService;
import com.spsy.pay.vo.CreateOrderVo;
import com.spsy.pay.vo.OWJEDFKPqwjle;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.math.BigDecimal;
import java.util.Date;

/**
 * @author: liuzhiping
 * @date: 2025/5/26 16:50
 **/
@RestController
@RequestMapping("/pay")
@Slf4j
public class PayController {



    @Autowired
    private IPaymentOrderService iPaymentOrderService;

    @Autowired
    private RabbitTemplate rabbitTemplate;


    //300万
    @PostMapping("/createOrder")
    public R createOrder(@RequestBody CreateOrderVo vo) throws Exception{



        log.info("参数2210a-lzp vo:{}",JSON.toJSONString(vo));




        /*PaymentOrder pay = new PaymentOrder();
        pay.setAmount();*/

        PaymentOrder paymentOrder = PaymentOrder.builder()
                .amount(new BigDecimal("0"))
                .currency("cny")
                .orderNo(vo.getOrderId())
                .merchantId( (long)100001)
                .expireTime(new Date())
                .subject("测试")
                .userId(Long.valueOf(vo.getUserId()))
                .returnUrl("www.baidu.com")
                .notifyUrl("www.baidu.com")
                .amount(new BigDecimal(vo.getPrice()))
                .status((long)1)
                .body("测试数据").build();

        //boolean boo =  paymentOrderService.save(paymentOrder);

        int count = iPaymentOrderService.insertPaymentOrder(paymentOrder);

        log.info("count:{}",count);

        String url = WeiXinUtil.payOrder(vo.getOrderId());



        //是不是主线业务 发短信告知？？？？？？
        // 这种非主线业务，耗时很长的都给rabbitmq去做（5秒），异步方式去做。


        //解耦：把非主线的业务，抽出去，主线就简单，叫解耦。
        //================================？？？？ rabbitmq 可以削峰
        //短信业务不是主线，又耗时很长，正好给rabbitmq【异步】
        //每一台是不是处理9w
        //2.5小时 3s内899999排队 最后一个人2.5小时
        //300w,900ws=2500小时
        //给用户发短信消息 3s 10线程250小时，10微服，25小时，
        //================================

        String phone = "138888811";

        if(true){
            this.rabbitTemplate.convertAndSend(RabbitMqCanstand.EXCHANGE_NAME, RabbitMqCanstand.ROTEING_KEY_NAME2,"138888811");
        }else{
            this.rabbitTemplate.convertAndSend("dfff","rrrr","13811890102");

        }

        OWJEDFKPqwjle owjedfkPqwjle = new OWJEDFKPqwjle();
        owjedfkPqwjle.setPhone("13811890102");
        owjedfkPqwjle.setUserName("zhansan");
        owjedfkPqwjle.setXxx("xxx");

        //要处理发送短信：【手机号、用户名称、xxx】
        this.rabbitTemplate.convertAndSend(RabbitMqCanstand.EXCHANGE_NAME,RabbitMqCanstand.ROTEING_KEY_NAME,JSON.toJSONString(owjedfkPqwjle));


        //rabbitmq 0ms 【3s】--3ms 1000倍 2.5；9000s；最后一个人3s
        //削峰


        log.info("url:{}",url);


        return R.ok(url);
    }

}
